package com.imesne.assistant.jdbc.command.entity;

import com.imesne.assistant.common.page.PageList;
import com.imesne.assistant.common.page.Pageable;

import java.util.List;

/**
 * Created by liyd on 17/4/12.
 */
public interface Select<T extends Object> extends ConditionBuilder<Select<T>> {

    /**
     * 白名单
     *
     * @param fields
     * @return
     */
    Select<T> include(String... fields);

    /**
     * 黑名单
     *
     * @param fields
     * @return
     */
    Select<T> exclude(String... fields);

    /**
     * 添加查询字段
     *
     * @param fields
     * @return
     */
    Select<T> addSelectField(String... fields);

    /**
     * 不查询实体类属性
     *
     * @return
     */
    Select<T> notSelectEntityField();

    /**
     * 排序属性
     *
     * @param fields
     * @return
     */
    Select<T> orderBy(String... fields);

    /**
     * 主键排序
     *
     * @return
     */
    Select<T> orderById();

    /**
     * asc排序
     *
     * @return
     */
    Select<T> asc();

    /**
     * desc 排序
     *
     * @return
     */
    Select<T> desc();

    /**
     * count查询
     *
     * @return
     */
    long count();

    /**
     * 单个结果
     *
     * @return
     */
    T singleResult();

    /**
     * 列表查询
     *
     * @return
     */
    List<T> list();

    /**
     * 分页列表查询
     *
     * @param pageable
     * @return
     */
    PageList<T> pageList(Pageable pageable);

    /**
     * 分页列表查询
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageList<T> pageList(int pageNum, int pageSize);

    /**
     * 查询结果，返回结果不一定是实体
     *
     * @return
     */
    Object objectResult();

    /**
     * 查询结果，返回结果不一定是实体
     *
     * @return
     */
    Object objectListResult();

}
